The invention relates generally to the field of data communication between digital devices in a network and more specifically to a method for routing a very large data file to a number of digital devices in a packet communication network.
Packet communication is a form of data communication whereby segments or packets of data are routed with error checking and confirmation of receipt. Packets may be transmitted directly between a source node and a destination node or may be relayed via a number of relay nodes. Several methods of data packet routing are known.
Some methods of packet communication are directory-based routing and non-directory-based routing. According to directory-based routing method, the address in the header of a packet is used as an index to a directory of packet routing lists stored in a source node. The source node must maintain and continuously update a routing list for each node in the network. In non-directory-based routing, the complexities associated with directory-based routing techniques are avoided. There is no need to store connectivity information for each transmitting node in the network, thus reducing the amount of overhead processing that must be done by the network to preserve network connections. However, non-directory-based routing techniques generally do not permit network parameter optimization. A number of patents have issued to the assignees of the present invention concerning various aspects of data network operation including U.S. Pat. Nos. 5,079,768; 5,115,433; and 5,007,052.
A common task that must be periodically performed in any network is the updating of network software in each of the physically separate machines that make up the network. The network software resides individually in each physically separate network node and controls how that machine interacts with the network. In general, changing the network software involves installing the new software on all of the machines in the network. This may be done manually by a human operator at each machine but is preferably done over the network in such a way that one node on the network directs the other nodes to accept data transmissions that include the new program code and then directs the nodes to execute the new code.
Typically, the data file that contains the new executable program code is very large when compared to other files transmitted on the network and may take many minutes to several hours to transmit, even just between two nodes. Updating all the nodes on a network can therefore consume significant network resources, particularly if the program code file is routed independently from the source node to each node in the network.
Two methods known in the art for program downloading are direct transmission and code float.
In direct transmission, an error free and correctly ordered connection is created between the computer that serves as the executable code source (the source) and the computer that requires the code update (the destination). Code is then sent, properly demarcated as to destination location. The destination computer then can store the received executable code in a local store for later execution upon successful and complete receipt.
This method has several drawbacks in practice, especially when utilized in attempting code download to a multitude of nodes in a geographically distributed broadcastless communication environment. First, when a large number of nodes require simultaneous updating, keeping track of the progress of the individual downloads becomes logistically difficult. In addition, the described method requires that the medium over which the download is proceeding be error free. To create an error free connection over any of several unreliable media requires substantial computing resources to be dedicated to the maintenance of each connection. In practice, this limits the number of simultaneous connections (downloads) that can exist. Finally, the path between the code source and the destination node must remain intact throughout the download. This requirement places possibly severe demands on the stability of the network topology; in environments where the network topology is changing rapidly, it may not be possible to maintain a connection for the length of time required for the complete code transfer.
Another method for the transport of executable code is often called the "code float" method. In this method, data packets containing the executable code are "floated" over the network medium to all the nodes in the network. Each node keeps track of the blocks it has received (or those it has not received and thus requires). When it has received and validated all the blocks of code it requires, the node generally sends in a report to the source stating that "it is done downloading." When all the nodes have reported in, the source can stop and free the consumed data bandwidth for other uses.
This method also has several drawbacks in practice that place limits on its effectiveness for download to geographically distinct nodes. First, the method requires that a broadcast medium (or a close approximation) be available for "floating" the code out. In addition, much data is sent out redundantly; the source does not know which blocks are still required by the receiving nodes and thus usually just keeps sending blocks in sequence until all the nodes have reported in as complete (or conversely, have reported in that they still need blocks of code). Finally, code floating by nature is best utilized when all the nodes in a network are homogeneous. It is unsuited for the download of different code bodies, for example in the case where nodes with completely different functionality are required.
What is needed is a method for distributing large files possibly containing executable code to a large number of nodes in a network that does not have the inefficiencies associated with direct transmission or code float.